package com.chengdu.his.sys.handler;

import com.chengdu.his.pojo.Dict;
import com.chengdu.his.sys.service.DictService;
import com.chengdu.his.utils.CommonResult;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 字典模块
 */

@CrossOrigin
@RestController
@RequestMapping("/dict") // 字典模块
public class DcitHandler {

    @Resource
    private DictService dictService;


    /**
     * 添加字典
     * @param dict 自定数据
     * @return CommonResult 统一返回类
     */
    @PostMapping("/add")
    public CommonResult addDict(@RequestBody Dict dict) {
        try {
            int i = dictService.insertDict(dict);
            if (i > 0) {
                return CommonResult.success(dict);
            }
            if (i == 0) {
                return CommonResult.error(500, "添加字典失败");
            }
            return CommonResult.error(-1, "您要添加的字典信息已经存在,请换一个.");
        } catch (Exception e) {
            e.printStackTrace();
            // dictService.insertDict(dict);出现异常怎么办？
            return CommonResult.error(503, "系统异常,添加失败,请联系管理员.");
        }
    }

    /**
     * 分页查询字典
     * @param pageNum 页码
     * @param pageSize 每页显示的条数
     * @return CommonResult 统一返回类
     */
    @GetMapping("/dicts/{pageNum}/{pageSize}")
    public CommonResult<PageInfo<Dict>> dicts(@PathVariable("pageNum") int pageNum, @PathVariable("pageSize") int pageSize) {
        try {
            PageHelper.startPage(pageNum, pageSize); // 分页查询只需要这一行，不用在xml中配置，底层用的是拦截器
            // PageHelper.offsetPage(pageNum, pageSize);
            // return dictService.dicts().size() > 0 ? CommonResult.success(dictService.dicts()) : CommonResult.error(401, "请求成功,但没有对应的数据.");
            // 优化分页
            List<Dict> dicts = dictService.dicts();
            PageInfo<Dict> pageInfo = new PageInfo<>(dicts);
            return dicts.size() > 0 ? CommonResult.success(pageInfo) : CommonResult.error(401, "请求成功,但没有对应数据.");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.error(503, "系统异常,查询失败,请联系管理员.");
        }
    }

    /**
     * 根据id查询字典信息
     * @param id 字典id
     * @return CommonResult 统一返回类
     * 访问路径：http://localhost:8080/dict/1  Restful
     */
    @GetMapping("/{id}")
    public CommonResult<Dict> findDictById(@PathVariable("id") int id) {
        try {
            Dict dict = dictService.findDictById(id);
            return null != dict  ? CommonResult.success(dict) : CommonResult.error(401, "请求成功,但没有对应数据.");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.error(503, "系统异常,查询失败,请联系管理员.");
        }
    }

    /**
     * 修改字典信息
     * @param dict 字典信息
     * @return CommonResult 统一返回类
     */
    @PutMapping("/update")
    public CommonResult updateDict(@RequestBody Dict dict) {
        System.out.println("修改的字典信息为：" + dict);
        try {
            int i = dictService.updateDict(dict);
            return i > 0 ? CommonResult.success(dict) : CommonResult.error(500, "修改字典信息失败或数据已被其他人修改.");
        } catch (Exception e) {
            e.printStackTrace();
            return CommonResult.error(503, "系统异常,修改失败,请联系管理员.");
        }
    }
}
